#include "MenuEstadisticasRecordsEnGeneral.h"
#include <math.h>

MenuEstadisticasRecordsEnGeneral::MenuEstadisticasRecordsEnGeneral(){

}


MenuEstadisticasRecordsEnGeneral::MenuEstadisticasRecordsEnGeneral(SDL_Surface* v){
	this->ventana = v;
	opcionActual = 0;
	this->sonido = new Sonido();
}

void MenuEstadisticasRecordsEnGeneral::OnKeyUp(SDLKey sym, SDLMod mod, Uint16 unicode) {
	dibujarOpciones();
}

void MenuEstadisticasRecordsEnGeneral::OnKeyDown(SDLKey sym, SDLMod mod, Uint16 unicode) {
	switch(sym){
		case SDLK_ESCAPE:
			Running = false;
			break;
		case SDLK_UP:
			opcionActual -= (opcionActual!=(0))?1:0;
			break;
		case SDLK_DOWN:
			opcionActual += (opcionActual!=(3))?1:0;
			break;
	}
}

int MenuEstadisticasRecordsEnGeneral::Partida(){
	return(0);
}


bool MenuEstadisticasRecordsEnGeneral::OnInit() {
    if(SDL_Init(SDL_INIT_EVERYTHING) < 0) {
        return false;
    }
	dibujarOpciones();

    return true;
}


void MenuEstadisticasRecordsEnGeneral::dibujarOpciones(){
	TTF_Init();
	SDL_Color colorNormal;
	colorNormal.r=255;
	colorNormal.g=255;
	colorNormal.b=255;
	SDL_Color colorActual;
	colorActual.r=127;
	colorActual.g=127;
	colorActual.b=255;
	
	TTF_Font* fontGrande = TTF_OpenFont("font.ttf",28);
	TTF_Font* fontMediana = TTF_OpenFont("font.ttf",24);
	TTF_Font* fontChica = TTF_OpenFont("font.ttf",18);
	SDL_Color c;
	SDL_Rect pos;

	//se carga la imagen de fondo
	pos.x = 0;
	pos.y = 0;
	SDL_Surface *imagenFondo = SDL_LoadBMP("MenuEstadisticasPorJugadorFondo1024x768.bmp");
	SDL_BlitSurface(imagenFondo,NULL,ventana,&pos);
	//Fin se carga la imagen de fondo
	
	pos.x=10;
	pos.y=10;
	c=colorActual;
	SDL_Surface* ttf = TTF_RenderText_Solid(fontChica,"ESC PARA VOLVER AL MENU DE ESTADISTICAS",c);
	SDL_BlitSurface(ttf,NULL,ventana,&pos);
	SDL_FreeSurface(ttf);

	c=colorNormal;
	ttf = TTF_RenderText_Solid(fontGrande,"MENU DE ESTADISTICAS",c);
	pos.x=350;
	pos.y=100;
	SDL_BlitSurface(ttf,NULL,ventana,&pos);
	SDL_FreeSurface(ttf);

	pos.x=400;
	pos.y=150;
	c=(opcionActual==0)?colorActual:colorNormal;
	ttf = TTF_RenderText_Solid(fontMediana,"PARTIDAS JUGADAS",c);
	SDL_BlitSurface(ttf,NULL,ventana,&pos);
	SDL_FreeSurface(ttf);

	pos.x=395;
	pos.y=180;
	c=(opcionActual==1)?colorActual:colorNormal;
	ttf = TTF_RenderText_Solid(fontMediana,"PARTIDAS GANADAS",c);
	SDL_BlitSurface(ttf,NULL,ventana,&pos);
	SDL_FreeSurface(ttf);

	pos.x=420;
	pos.y=210;
	c=(opcionActual==2)?colorActual:colorNormal;
	ttf = TTF_RenderText_Solid(fontMediana,"MAYOR PUNTAJE",c);
	SDL_BlitSurface(ttf,NULL,ventana,&pos);
	SDL_FreeSurface(ttf);

	pos.x=375;
	pos.y=240;
	c=(opcionActual==3)?colorActual:colorNormal;
	ttf = TTF_RenderText_Solid(fontMediana,"MAYOR TIEMPO JUGADO",c);
	SDL_BlitSurface(ttf,NULL,ventana,&pos);
	SDL_FreeSurface(ttf);
	
	pos.y=320;
	UsuariosDAO* usuariosDAO = UsuariosDAO::getInstancia();
	Lista<Usuario*>* listaUsuarios;
	char* a = new char();

	if (opcionActual == 0) {
		listaUsuarios = usuariosDAO->getMejoresUsuariosPorPartidasJugadas();
		IteradorLista<Usuario*> iteradorUsuarios = listaUsuarios->iterador();
		while(iteradorUsuarios.tieneSiguiente()){
			pos.x=350;
			Usuario* usuario = iteradorUsuarios.siguiente();
			ttf = TTF_RenderText_Solid(fontChica,usuario->getNombre().c_str(),colorNormal);
			SDL_BlitSurface(ttf,NULL,ventana,&pos);
			SDL_FreeSurface(ttf);

			pos.x=650;
			itoa(usuario->getPartidasJugadas(),a,10);
			ttf = TTF_RenderText_Solid(fontChica,a,colorNormal);
			SDL_BlitSurface(ttf,NULL,ventana,&pos);
			SDL_FreeSurface(ttf);
			
			pos.y+=30;
		}
	}
	

	if (opcionActual == 1) {
		listaUsuarios = usuariosDAO->getMejoresUsuariosPorPartidasGanadas();
		IteradorLista<Usuario*> iteradorUsuariosPG = listaUsuarios->iterador();

		while(iteradorUsuariosPG.tieneSiguiente()){
			pos.x=350;
			Usuario* usuario = iteradorUsuariosPG.siguiente();
			ttf = TTF_RenderText_Solid(fontChica,usuario->getNombre().c_str(),colorNormal);
			SDL_BlitSurface(ttf,NULL,ventana,&pos);
			SDL_FreeSurface(ttf);

			pos.x=650;
			itoa(usuario->getPartidasGanadas(),a,10);
			ttf = TTF_RenderText_Solid(fontChica,a,colorNormal);
			SDL_BlitSurface(ttf,NULL,ventana,&pos);
			SDL_FreeSurface(ttf);
			
			pos.y+=30;
		}
	}

	if (opcionActual == 2) {
		listaUsuarios = usuariosDAO->getMejoresUsuariosPorPuntos();
		IteradorLista<Usuario*> iteradorUsuariosPuntos = listaUsuarios->iterador();
		while(iteradorUsuariosPuntos.tieneSiguiente()){
			pos.x=350;
			Usuario* usuario = iteradorUsuariosPuntos.siguiente();
			ttf = TTF_RenderText_Solid(fontChica,usuario->getNombre().c_str(),colorNormal);
			SDL_BlitSurface(ttf,NULL,ventana,&pos);
			SDL_FreeSurface(ttf);

			pos.x=650;
			itoa(usuario->getPuntosGanados(),a,10);
			ttf = TTF_RenderText_Solid(fontChica,a,colorNormal);
			SDL_BlitSurface(ttf,NULL,ventana,&pos);
			SDL_FreeSurface(ttf);
			
			pos.y+=30;
		}
	}

	if (opcionActual == 3) {
		listaUsuarios = usuariosDAO->getMejoresUsuariosPorTiempoJugado();
		IteradorLista<Usuario*> iteradorUsuariosTJ = listaUsuarios->iterador();
		while(iteradorUsuariosTJ.tieneSiguiente()){
			pos.x=350;
			Usuario* usuario = iteradorUsuariosTJ.siguiente();
			ttf = TTF_RenderText_Solid(fontChica,usuario->getNombre().c_str(),colorNormal);
			SDL_BlitSurface(ttf,NULL,ventana,&pos);
			SDL_FreeSurface(ttf);

			pos.x=650;
			int tiempo = usuario->getTiempoJugado()/1000;
			itoa(tiempo,a,10);
			string descripcionTiempo = "";
			descripcionTiempo.append((string)a);
			descripcionTiempo.append(" segundos");
			ttf = TTF_RenderText_Solid(fontChica,descripcionTiempo.c_str(),colorNormal);
			SDL_BlitSurface(ttf,NULL,ventana,&pos);
			SDL_FreeSurface(ttf);
			
			pos.y+=30;
		}
	}
	
	SDL_Flip(ventana);
	SDL_FreeSurface(imagenFondo);
	TTF_Quit();
}

void MenuEstadisticasRecordsEnGeneral::OnRender() {
}

void MenuEstadisticasRecordsEnGeneral::OnCleanup() {
    SDL_Quit();
}

int MenuEstadisticasRecordsEnGeneral::OnExecute() {
    if(OnInit() == false) {
        return -1;
    }

	// se carga el sonido del menu
	if(sonido != NULL){
		sonido->ejecutar("Pacman_VICTORIA_WAV_00.14.wav", 10, -1, 0);
	}
	else {
		cout << "ERROR" <<endl;
	}
	// Fin se carga el sonido del menu

    SDL_Event Event;
	
    while(Running) {
        while(SDL_PollEvent(&Event)) {
            OnEvent(&Event);
        }
    }
	
	sonido->close();

    //OnCleanup();
    return 0;
}

int MenuEstadisticasRecordsEnGeneral::OpcionElegida(){
	return(opcionActual);
}